package main

import (
	"flag"
	"fmt"
	"os"
	"path/filepath"
)

// FileStats 存储文件统计信息
type FileStats struct {
	TotalFiles    int64
	TotalDirs     int64
	TotalSize     int64
	FileTypeCount map[string]int64
}

func main() {
	// 解析命令行参数
	path := flag.String("path", ".", "要统计的目录路径")
	flag.Parse()

	// 初始化统计信息
	stats := FileStats{
		FileTypeCount: make(map[string]int64),
	}

	// 遍历目录
	err := filepath.Walk(*path, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if info.IsDir() {
			stats.TotalDirs++
		} else {
			stats.TotalFiles++
			stats.TotalSize += info.Size()
			
			// 统计文件类型
			ext := filepath.Ext(path)
			if ext == "" {
				ext = "无扩展名"
			}
			stats.FileTypeCount[ext]++
		}
		return nil
	})

	if err != nil {
		fmt.Printf("遍历目录时出错: %v\n", err)
		os.Exit(1)
	}

	// 输出统计结果
	fmt.Printf("目录统计结果:\n")
	fmt.Printf("总文件数: %d\n", stats.TotalFiles)
	fmt.Printf("总目录数: %d\n", stats.TotalDirs)
	fmt.Printf("总大小: %.2f MB\n", float64(stats.TotalSize)/1024/1024)
	fmt.Printf("\n文件类型分布:\n")
	for ext, count := range stats.FileTypeCount {
		fmt.Printf("%s: %d\n", ext, count)
	}
} 